package com.common.core.utils;

import java.util.List;

public class CollectionProcessUtil {

    /**
     * 分段执行器
     *
     * @param batchSize 批量数
     * @param index     坐标
     * @param list      集合
     * @param invoker   执行方法
     */
    public static <T> void processInSlice(int index, int batchSize, List<T> list, CollectionProcessUtil.ProcessInSliceInvoker<T> invoker) {
        if (null == list || list.isEmpty()) {
            return;
        }
        int totalSize = list.size();
        while (index < totalSize) {
            int toIndex = Math.min(index + batchSize, totalSize);
            invoker.doProcess(list.subList(index, toIndex));
            index = toIndex;
        }
    }

    public static <T> void processInSlice(int batchSize, List<T> list, CollectionProcessUtil.ProcessInSliceInvoker<T> invoker) {
        int index = 0;
        processInSlice(index, batchSize, list, invoker);
    }

    public static <T> void processInSlice(List<T> list, CollectionProcessUtil.ProcessInSliceInvoker<T> invoker) {
        int index = 0;
        int batchSize = 100;
        processInSlice(index, batchSize, list, invoker);
    }

    public interface ProcessInSliceInvoker<T> {
        void doProcess(List<T> list);
    }
}